package route

import (
	"github.com/gin-gonic/gin"
	"github.com/spf13/viper"
	"go-shop-api/api/apiv1"
	"go-shop-api/internal/route/middleware"
	"net/http"
)

/*
	路由.go
	author:zydh
*/

// 路由
func route(r *gin.Engine) {

	////可以匹配所有请求方法的Any方法如下： any 接受所有method方法
	//r.Any("/404", funs(c *gin.Context) {
	//	switch c.Request.Method {
	//	case http.MethodGet:
	//		c.JSON(http.StatusOK, gin.H{
	//			"method": "get",
	//		})
	//	}
	//	c.JSON(http.StatusOK, gin.H{
	//		"msg": http.MethodGet,
	//	})
	//})

	r.GET("/", apiv1.Index)
	r.POST("/v", apiv1.Validator)

	//验证/激活邮箱
	r.GET("/valid/email/:token", apiv1.ValidEmail)

	v1 := r.Group("api/v1")
	{

		//用户
		user := v1.Group("/user")
		{
			user.POST("/register", apiv1.UserRegister) //注册
			user.POST("/login", apiv1.UserLogin)       //登录
		}

		//不用token
		notToken := v1.Group("")
		{
			notToken.GET("/index", apiv1.Index)
			//验证码
			notToken.GET("/captcha", apiv1.GetCaptcha)    //获取验证码
			notToken.POST("/captcha", apiv1.CheckCaptcha) //验证验证码

			//发送sms
			notToken.POST("/send_sms", apiv1.SendSms)
			notToken.POST("/check_sms", apiv1.CheckSms)

			//轮播图
			notToken.GET("/banner", apiv1.ListBanner)
		}

		//要用token/登录保护
		useToken := v1.Group("", middleware.JWTAuthMiddleware())
		{
			//登录的用户
			user1 := useToken.Group("/user")
			{
				user1.PUT("/update", apiv1.UserUpdate) //修改头像
				user1.POST("/info", apiv1.Userinfo)    //获取用户信息 钱包信息，积分信息等
			}

			//文件上传
			useToken.POST("/upload", apiv1.UploadFile)
			//发送邮件
			useToken.POST("/send_email", apiv1.SendEmail)
		}

		////列表
		//lists := v1.Group("/lists")
		//{
		//	lists.GET("", api.ListsIndex)
		//	lists.GET("/:id", api.ListsShow)    //查询详情
		//	lists.POST("", api.ListsAdd)        //新增
		//	lists.PUT("/:id", api.ListsEdit)    //修改
		//	lists.DELETE("/:ids", api.ListsDel) //单条/批量删除
		//}
		//v1.GET("/lists",api.ListsIndex)	//列表
		//v1.GET("/lists/:id", api.ListsShow) //查询详情
		//v1.POST("/lists",api.ListsAdd)	//新增
		//v1.PUT("/lists/:id", api.ListsEdit)	//修改
		//v1.DELETE("/lists/:id", api.ListsDel)	//删除
		//v1.POST("/lists/change",api.ListsFieldAlterVal)	//修改字段的状态

	}

}

// LoadRoute 路由加载
func LoadRoute() {
	r := gin.Default()

	// 处理multipart forms提交文件时默认的内存限制是32 MiB
	// 可以通过下面的方式修改
	// router.MaxMultipartMemory = 8 << 20  // 8 MiB
	// 为 multipart forms 设置较低的内存限制 (默认是 32 MiB)
	r.MaxMultipartMemory = 8 << 20 // 8 MiB

	//全局注册中间件  跨域中间件
	r.Use(middleware.CrossDomain())

	//加载静态文件的路径
	//这里要注意，跳出的层级是以 route.go 为准，像这次在 /internal/route/  所以需要跳 两次 ，成功访问
	r.StaticFS("/web", http.Dir("./web"))
	r.StaticFS("/website", http.Dir("./website"))

	//路由
	route(r)

	//启动http服务，默认在0.0.0.0:8080启动服务
	err := r.Run(viper.Get("app.http_port").(string)) // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
	if err != nil {
		panic("load route fail,err:" + err.Error())
	}
}
